<?php 
class ListController extends HeadController{

	// 首页
	public function index(){
        session('url',__URL__);
		// 获得cid
		$cid = Q('get.cid',0,'intval');
		// 获得当前标签名称
		$cname = K('Category')->where("cid={$cid}")->getField('cname');
		// 分配给前端
		$this->assign('cname',$cname);
		// 获得所有标签数据
		$cateData = K('Category')->all();
		// 获得所有子级cid
		$cateData = K('Category')->get_son($cateData,$cid);
		// 压入自己的cid
		$cateData[] = $cid;
		// 把数组组合成字符串 用implode
		$cateStr = implode(',', $cateData);

		// 通过cid找到对应商品的gid
		$gids = K('Goods')->where("f_category_cid in({$cateStr})")->getField('gid',true);
		if ($gids) {
			// 通过gid获得品牌id
			$bidData = K('Goods')->where("gid in(" . implode(',', $gids). ")")->group('f_brand_bid')->getField('f_brand_bid',true);
			// 获得品牌数据
			$brandData = K("Brand")->where("bid in(".implode(',', $bidData).")")->all();
			// 分配给前端
			$this->assign('brandData',$brandData);

			// 通过gid获得商品属性
			$attrData = K('Goods_attr')->where("f_goods_gid in(" . implode(',', $gids). ")")->group('gavalue')->all();
			// 重编数组，让相同类型的属性放在一个数组下
			$tempAttr = array();
			foreach ($attrData as $v) {
				$tempAttr[$v['f_type_attr_taid']][] = $v;
			}
			// 循环上一个数组把属性名称插入每个数组
			$tempAttrFinal = array();
			foreach ($tempAttr as $k => $va) {
				$tempAttrFinal[] = array(
					'tname' => K('Type_attr')->where("taid={$k}")->getField('taname'),
					'tvalue' => $va
					);
			}
			// 获得属性个数
			$total = count($tempAttrFinal);
			// 每个属性对应一个_后的数字,初始为0_0_0 array_fill可组成这样数组
			// $param = isset(Q('get.param')) ? explode('_', Q('get.param')) : array_fill(0, $total, 0);
			$param = isset($_GET['param']) ? explode('_', $_GET['param']) : array_fill(0, $total, 0);
			// 分配给前端
			$this->assign('param',$param);
			// p($param);

			// 因为上边查询属性时用group把重复的值合并，现在要找到与合并后的值想通的gaid，然后把所对应的gid查出就可以找到当前属性所对应的所有商品
			$temp = array();
			foreach ($param as $v) {
				// 如果当前属性gaid不为0，即条件不是不限
				if ($v) {
					//自关联查出商品
					$temp[]= M()->join('__f_goods_attr__ g1 JOIN __f_goods_attr__ g2 ON g1.gavalue=g2.gavalue')->where("g1.gaid={$v}")->getField('g2.f_goods_gid',true);
				}
			}
			// p($temp);
			// 如果找到了商品id
			if ($temp) {
				// 先把第一个数取出来作为比较
				$intersect = $temp[0];
				foreach ($temp as $v) {
					// 与每一个取交集，得到筛选出来gid
					$intersect = array_intersect($intersect, $v);
				}
			}

			// 如果存在$intersect,就证明进行了筛选
			if (isset($intersect)) {
				// 与当前标签下的gids进行取交集
				$gidss = array_intersect($intersect, $gids);
			}else{
				// 否则没有进行筛选就反出不限
				$gidss = $gids;
			}

			// 如果筛选后有符合商品
			if ($gidss) {
				// 获得品牌id
				$bid = Q('get.bid',0,'intval');
				// 如果筛选不是不限
				if ($bid) {
					// 通过bid获得商品gid
					$brand_gids = K('Goods')->where("f_brand_bid={$bid}")->getField('gid',true);
					// 取交集
					$gidss = array_intersect($gidss, $brand_gids);
				}
			}

			// 如果筛选后有符合商品
			if ($gidss) {
				// 压成字符串
				$gidStr = implode(',', $gidss);
				// 找到对应的商品
				$data = K('Goods')->where("gid in({$gidStr})")->all();
				// 压入打折
				foreach ($data as $k => $v) {
					$sale = $v['new_price']/$v['old_price']*10;
					$data[$k]['sale'] = substr($sale, 0,3);
				}
			}else{
				$data =array();
			}
			// 获得data长度
			$total=count($data);
			// 分配给前端
			$this->assign('data',$data);
			$this->assign('total',$total);

		}else{
			$tempAttrFinal = NULL;
		}
		
		// 通过分类id找到相应数组

		// p($tempAttrFinal);
		// 分配给前端
		$this->assign('tempAttrFinal',$tempAttrFinal);
		// 显示模板
		$this->display();
	}













}


















 ?>